The present invention relates to the field of storage apparati and techniques and, more particularly, to recovery of in-progress changes made during the use of a software application and to reduce downtime in the event of a system or process failure.
Conventional systems exist that include an automatic mechanisms configured to periodically save information automatically while an electronic software application is in use. For example, many word processing applications include this function. The automatically saved information is often preserved for subsequent retrieval once the system is turned on again, or when power is restored. Such mechanisms, however, do not fully address the problem of losing data, especially when a power failure or other system failure occurs. Conventional methods do not entirely account for all information that could be lost, such as work that is in-progress before a process or system failure occurs, but that was created or changed after the last automatic save occurs. Conventional systems lose this data upon a process or system failure.
One modern use of such an application is in the area of website development and maintenance. Applications specifically tailored to developing Internet websites are well known in the website development industry. Many of these applications offer simplified methods for designing and maintaining a website such as receiving, storing, arranging and delivering information within a website. In more advanced systems, information must be stored in multiple locations and in different files so that other advanced functions of the application program can operate and have access to certain information.
It is often a challenge to develop large websites due to the need to coordinate the efforts of many contributors. As a result, modern website development tools have been developed that enable multiple workstations to concurrently create website content. Furthermore, many websites need to be frequently modified, and contributors usually modify them in an ad hoc process. Problems occur when users from separate workstations try to update the same information on a website, confusing the process. Propounding the problem, many businesses require that their Internet sites be updated by the day, hour or minute, and by numerous contributors. And, as the number of contributors increases, so does the volume, and complexity of content, as well as its use. As information is created, it must be saved by all of these contributors, who may or may not be diligent in maintaining proper data preservation procedures. In the event of a power failure, for example, the problem is even more profound, as in-progress changes that have not been manually or automatically saved may be lost when a system loses power or otherwise shuts down. As a result, managing the website for efficiency and quality control has become difficult.
In response to these problems, system applications have been developed for managing website development. Some of these include software configuration management systems, document management systems and database publishing systems. In one such application, websites may be developed within work areas where individual website developers construct or maintain separate portions of content that define a website. This helps to spread out the tasks of website development to multiple people. The final contributions from each developer may then be incorporated into the final website.
There are several disadvantages associated with such known website development systems. For example, where maintaining a website may require the efforts of large numbers of people, it may be desirable to have website contributors work in parallel. Software configuration management systems do not allow contributors to simultaneously make changes to the same area of a website. In-progress changes may be preserved in a random manner, if at all, by individual developer systems. And, conventional systems typically do not allow individual contributors to separately test their own work without publishing to the website. The result is that individual contributors cannot foresee the effects of their contributions when combined with other contributions. As a result, conflicting changes may be posted to a website, corrupting its content and undermining the website""s integrity.
Conventional systems sometimes rely on a central website control person known as a xe2x80x9cwebmasterxe2x80x9d to integrate all changes posted to a website. This webmaster is solely responsible for the quality control of the website and for integrating all of the content. With the existence of multiple content contributors, the webmaster often becomes a bottleneck in maintaining and developing websites. Integrating the work of multiple contributors is a time consuming and labor intensive task, and includes debugging the content and resolving conflicts among contributors. To further complicate things, webmasters have no real-time control over the contribution process. This makes it difficult if not impossible for the webmaster to properly organize and maintain a website. The webmaster is left to sort through errors, to resolve conflicts and to schedule website changes after the content is delivered.
Such a system requires that information be stored in multiple locations, within many different files and within a format where the information can be easily accessed and cross referenced within the application. Conventional applications require a user to manually submit and store information into some location. If a user desires submissions or storage into multiple locations, they are usually done individually, leaving the user the extra task of deciding proper storage locations to store data, including in-progress changes, and the responsibility of manually storing the information. In either case, the deployment of information requires arduous tasks that detract from the principle purpose of the development software, developing websites.
In the field of website development and maintenance, it is of paramount importance to preserve data while a website is being developed and maintained. Many hours go into this process to produce data defining content that is displayed on a website. As a practical matter, however, system and process failures occur that threaten the integrity of the data produced and stored in the system.
Therefore, there exists a need for a system and method to more efficiently save in-progress information in the event of a process or system failure and to reduce the amount of downtime resulting from such failures. As will be seen, the invention accomplishes this in a simple and elegant manner.
The invention includes a method of and apparatus configured to enable the preservation and recovery of in-progress developments and changes as they are made in a system for development of content in the event of a process or system failure. The in-progress data developments and changes may be preserved while they are created, and may then be retrieved and recovered after the system or process is recovered. In one embodiment, the cache memory contents are mirrored into a memory-mapped file, providing a redundant location for cache data. In the event of a failure, the mirrored cache information is available for recovery from a file. This extra cache location can be filled and flushed as needed by the system as the cache data is stored to disk or other memory location, obviating its preservation. The invention further includes a method of and apparatus for recovering and restarting the actual process or system after such a failure. Utilizing one or both features, an application utilizing the invention may be able to reduce the amount of data and process time lost as a result of a process or system failure.